package algorithm;

/**
 * 给定一个字符串 s 和一个整数 k，从字符串开头算起，每 2k 个字符反转前 k 个字符。
 *
 * 如果剩余字符少于 k 个，则将剩余字符全部反转。
 * 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/reverse-string-ii
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * 2021-08-20 23:13:26
 */

 public class Solution {

     public static void main(String[] args) {

         String s = "abcdefghij";
         String s1 = "hyzqyljrnigxvdtneasepfahmtyhlohwxmkqcdfehybknvdmfrfvtbsovjbdhevlfxpdaovjgunjqlimjkfnqcqnajmebeddqsgl";
         String s2 = "hyzqyljrnigxvdtneasepfahmtyhlohwxmkqcdfehybknvdmfrfvtbsovjbdhevlfxpdaovjgunjqlimjkfnqcqnajmebeddqsgl";

         System.out.println(reverseStr(s2, 39));
//         System.out.println(aaa("abcdef"));

     }

    public static String aaa(String s) {
        char[] chars = s.toCharArray();

        int l = 0;
        int r = chars.length -1;

        while (l<r){
            char tmp = chars[l];
            chars[l] = chars[r];
            chars[r] = tmp;
            l++;
            r--;
        }

        return String.copyValueOf(chars);
    }


    public static String reverseStr(String s, int k) {

        char[] chars = s.toCharArray();

        k = Math.min(k, chars.length);

        for (int j = 0; j < chars.length; j=j+2*k) {
            if (j+k>chars.length && chars.length - j >=k){
                return String.copyValueOf(chars);
            }

            int l = j;
            int r = j+k-1;

            if (chars.length - j <=k){
                r = chars.length-1;
            }

            while (l<r){
                char tmp = chars[l];
                chars[l] = chars[r];
                chars[r] = tmp;
                l++;
                r--;
            }
        }

        return String.copyValueOf(chars);
    }
}